﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using DAL.Entity;
using DAL.Persistencia;
using BLL.Utils;
using System.Text.RegularExpressions;

namespace NewTierra.Pages.PSupplier
{
    public partial class AddTarif : System.Web.UI.Page
    {
        public string corFieldTarifas;
        public static string DescPoliticaCHD;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Session["PeriodoIDTarifas"] = "146";
                //Session["Sid"] = "60787";                
                //ViewState["Sid"] = 60787;
                DescPoliticaCHD = "TESTE";

                if (Session["Sid"] != null)
                {
                    ViewState["Sid"] = Session["Sid"];
                    VerificaBase();
                    PreencheTitulos();
                    CarregarDadosTarifas(sender, e, "Nome");
                    CarregarDadosMeal(sender, e);
                    CarregarDadosPeriodos(sender, e, "DESC");
                    popularDrops();
                    txtStatusTarifa.Text = "";
                    txtStatusTarifaTotal.Text = "";
                    txtStatusMeal.Text = "";
                    txtStatusMealTotal.Text = "";
                    ViewState["TipoTarifa"] = "Apartamento";
                    ViewState["OpenSemPoliticaIdTarifa"] = null;
                    MudaTipoCadastro(sender, e);
                }
            }

        }

        #region Regras Bases

        protected void PopulaGridBase()
        {
            try
            {
                SupplierDAL sp = new SupplierDAL();
                SBasesDAL bd = new SBasesDAL();

                GridBases.DataSource = bd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"]));
                GridBases.DataBind();

                GridBases.SelectedIndex = 0;


                foreach (GridViewRow row in GridBases.Rows)
                {
                    ViewState["IdTarifaBase"] = row.Cells[0].Text;
                    break;
                }



            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void GridBases_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                ViewState["IdTarifaBase"] = Convert.ToInt32(GridBases.SelectedRow.Cells[0].Text);

                CarregarDadosTarifas(sender, e, "Nome");

                CarregarMeal(sender, e);

                lblMsgAddMeal.Text = "";
                txtPorcentagemImpostoMeal.Text = "0";
                txtPorcentagemTaxaMeal.Text = "0";
                txtStatusMeal.Text = "";
                txtStatusMealTotal.Text = "";
                lblErroStatusValorMeal.Text = "";

                //---------------------------------------

                txtPorcentagemImposto.Text = "0";
                txtPorcentagemTaxa.Text = "0";
                txtComissao.Text = "0";
                txtStatusTarifa.Text = "";
                txtStatusTarifaTotal.Text = "";
                txtComissao.Text = "0";
                lblErroStatusValorTarifa.Text = "";
                lblMsgAddTarifa.Text = "";

                popularDrops();
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        #endregion

        #region Popular Periodos

        protected void CarregarDadosPeriodos(object sender, EventArgs e, string ordem)
        {
            CarregarPeriodos(sender, e, ordem);
        }

        protected void CarregarPeriodos(object sender, EventArgs e, string ordem)
        {
            try
            {
                PeriodosDAL p = new PeriodosDAL();

                Dictionary<string, string> dadosPeriodos = (Dictionary<string, string>)Session["IdsPeriodos"];

                GridTarifasPeriodo.DataSource = p.ListarTodosFds(Convert.ToInt32(Session["Sid"]), Convert.ToInt32(dadosPeriodos["IdMercado"]), Convert.ToInt32(dadosPeriodos["IdBaseTarifaria"]), Convert.ToInt32(dadosPeriodos["IdResponsavel"]));
                GridTarifasPeriodo.DataBind();

                if (GridTarifasPeriodo.PageCount > 0)
                {
                    int i = 0;

                    foreach (GridViewRow row in GridTarifasPeriodo.Rows)
                    {
                        if (row.Cells[0].Text == Session["PeriodoIDTarifas"].ToString())
                        {
                            GridTarifasPeriodo.SelectedIndex = i;
                            break;
                        }

                        i++;
                    }
                }

                PeriodosDAL perd = new PeriodosDAL();

                S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                if (smp.S_Mercado_Estacao.S_mercado_estacao_pacote != null)
                {
                    chkDividePacote.Visible = true;
                    chkDividePacote.Checked = true;
                }
                else
                {
                    chkDividePacote.Visible = false;
                    chkDividePacote.Checked = false;
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        public void SortCommandPeriodo(object sender, GridViewSortEventArgs e)
        {
            if (ViewState["ordenarPeriodo"] == "")
            {
                CarregarDadosPeriodos(sender, e, "DESC");
                ViewState["ordenarPeriodo"] = 1;
            }
            else
            {
                CarregarDadosPeriodos(sender, e, "ASC");
                ViewState["ordenarPeriodo"] = "";

            }
        }

        protected void GridTarifasPeriodo_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session["PeriodoIDTarifas"] = GridTarifasPeriodo.SelectedRow.Cells[0].Text;
            CarregarDadosTarifas(sender, e, "Nome");
            CarregarDadosMeal(sender, e);
            VerificaPromocoes();

            PeriodosDAL perd = new PeriodosDAL();

            S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

            if (smp.S_Mercado_Estacao.S_mercado_estacao_pacote != null)
            {
                chkDividePacote.Visible = true;
                chkDividePacote.Checked = true;
            }
            else
            {
                chkDividePacote.Visible = false;
                chkDividePacote.Checked = false;
            }
        }

        #endregion

        #region Popula Dados Tarifas

        protected void popularDrops()
        {
            PopulaDropTipoRoom();
            PopulaDropCategoria();
            PopulaDropTipoTarifa();
            PopulaDropStatusTarif();
            PopulaDropMeal();
            PopulaDropStatusMeal();
            PopularDropQtdCHD();
            PopularDropIdadeCHDAte();
            PopularDropIdadeCHDDe();
            PopularDropPoliticaTC();
        }

        void PopulaDropTipoRoom()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropTipoRoom.DataSource = n.Tipo_Room.ToList();
                    DropTipoRoom.DataValueField = "Tipo_room_id";
                    DropTipoRoom.DataTextField = "Tipo_room_nome";
                    DropTipoRoom.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        void PopulaDropCategoria()
        {
            try
            {
                TarifaDAL t = new TarifaDAL();
                TarifCategoriaDAL tc = new TarifCategoriaDAL();

                //using (NewTierraEntities Con = new NewTierraEntities())
                //{
                //    if (!t.VerificaTarifaExistente(Convert.ToInt32(Session["PeriodoIDTarifas"])))
                //    {

                DropCategoria.DataSource = tc.ListarTodos();
                DropCategoria.DataValueField = "Tarif_categoria_id";
                DropCategoria.DataTextField = "Tarif_categoria_nome";
                DropCategoria.DataBind();

                //    }
                //    else
                //    {
                //DropCategoria.DataSource = tc.ListarTodosJaCadastrados(Convert.ToInt32(Session["PeriodoIDTarifas"]));
                //DropCategoria.DataValueField = "Tarif_categoria_id";
                //DropCategoria.DataTextField = "Tarif_categoria_nome";
                //DropCategoria.DataBind();
                //}
                //}

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        void PopulaDropTipoTarifa()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropTipoTarifa.DataSource = n.S_Mercado_Tipo_Tarifa.ToList();
                    DropTipoTarifa.DataValueField = "S_mercado_tipo_tarifa_id";
                    DropTipoTarifa.DataTextField = "S_mercado_tipo_tarifa_nome";
                    DropTipoTarifa.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        void PopulaDropStatusTarif()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropStatusTarif.DataSource = n.S_Mercado_Tarifa_Status.ToList();
                    DropStatusTarif.DataValueField = "S_mercado_tarifa_status_id";
                    DropStatusTarif.DataTextField = "S_mercado_tarifa_status_nome";
                    DropStatusTarif.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void CarregarDadosTarifas(object sender, EventArgs e, string ordem)
        {
            CarregarTarifas(sender, e);
            //MergeCells();
        }

        protected void CarregarTarifas(object sender, EventArgs e)
        {
            try
            {
                TarifaDAL t = new TarifaDAL();

                SBasesDAL sbd = new SBasesDAL();
                STarifaBaseDAL stbd = new STarifaBaseDAL();

                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {

                    S_Tarifa_Base st = stbd.ObterPorId(Convert.ToInt32(ViewState["IdTarifaBase"]));

                    if (st != null)
                    {
                        GridTarifas.DataSource = t.ListarTodosOrdenadoComBase(Convert.ToInt32(Session["PeriodoIDTarifas"]), Convert.ToInt32(ViewState["IdTarifaBase"]));
                        GridTarifas.DataBind();
                    }
                    else
                    {
                        GridTarifas.DataSource = t.ListarTodosOrdenadoComBase(Convert.ToInt32(Session["PeriodoIDTarifas"]), 0);
                        GridTarifas.DataBind();
                    }

                }
                else
                {
                    GridTarifas.DataSource = t.ListarTodosOrdenado(Convert.ToInt32(Session["PeriodoIDTarifas"]));
                    GridTarifas.DataBind(); //Desenhar
                }

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        public void SortCommandTarifa(object sender, GridViewSortEventArgs e)
        {
            if (ViewState["ordenarTarifa"] == "")
            {
                CarregarDadosTarifas(sender, e, "Nome");
                ViewState["ordenarTarifa"] = 1;
            }
            else
            {
                CarregarDadosTarifas(sender, e, "Preco");
                ViewState["ordenarTarifa"] = "";

            }
        }

        protected void PaginarDadosTarifas(object sender, GridViewPageEventArgs e)
        {
            //Realiza a paginação
            GridTarifas.PageIndex = e.NewPageIndex;
            CarregarDadosTarifas(sender, e, "Nome"); //Atualizar os dados do GridView
        }

        #endregion

        #region Popula Dados Meal

        void PopulaDropMeal()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropMeal.DataSource = n.S_Meal.ToList();
                    DropMeal.DataValueField = "S_meal_id";
                    DropMeal.DataTextField = "S_meal_nome";
                    DropMeal.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        void PopulaDropStatusMeal()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropStatusMeal.DataSource = n.S_Mercado_Tarifa_Status.ToList();
                    DropStatusMeal.DataValueField = "S_mercado_tarifa_status_id";
                    DropStatusMeal.DataTextField = "S_mercado_tarifa_status_nome";
                    DropStatusMeal.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void CarregarDadosMeal(object sender, EventArgs e)
        {
            CarregarMeal(sender, e);
        }

        protected void CarregarMeal(object sender, EventArgs e)
        {
            try
            {
                MealDAL m = new MealDAL();
                SBasesDAL sbd = new SBasesDAL();
                STarifaBaseDAL stbd = new STarifaBaseDAL();

                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {

                    S_Tarifa_Base st = stbd.ObterPorId(Convert.ToInt32(ViewState["IdTarifaBase"]));

                    if (st != null)
                    {
                        GridMeal.DataSource = m.ListarTodos(Convert.ToInt32(Session["PeriodoIDTarifas"]), Convert.ToInt32(ViewState["IdTarifaBase"]));
                        GridMeal.DataBind();
                    }
                    else
                    {
                        GridMeal.DataSource = m.ListarTodos(Convert.ToInt32(Session["PeriodoIDTarifas"]), 0);
                        GridMeal.DataBind();
                    }
                }
                else
                {
                    GridMeal.DataSource = m.ListarTodos(Convert.ToInt32(Session["PeriodoIDTarifas"]));
                    GridMeal.DataBind(); //Desenhar
                }


                foreach (GridViewRow item in GridMeal.Rows)
                {
                    Label lblAddFile = (Label)item.FindControl("lblAddFile");
                    CheckBox chkAddFile = (CheckBox)item.FindControl("chkAddFile");

                    if (lblAddFile.Text != "") chkAddFile.Checked = true; else chkAddFile.Checked = false;
                }

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void PaginarDadosMeal(object sender, GridViewPageEventArgs e)
        {
            //Realiza a paginação
            GridMeal.PageIndex = e.NewPageIndex;
            CarregarDadosMeal(sender, e); //Atualizar os dados do GridView
        }

        #endregion

        #region Regras Tarifas

        protected void MudaTipoCadastro(object sender, EventArgs e)
        {
            if (ddlTipoCadastro.SelectedItem.Text.Equals("Valor"))
            {
                DropStatusTarif.Visible = false;
                txtStatusTarifa.Visible = true;
                txtStatusTarifaTotal.Visible = true;
                lblTotalTarifaTXT.Visible = true;
                txtStatusTarifa.Text = "";
                txtPorcentagemTaxa.Enabled = true;
                txtPorcentagemImposto.Enabled = true;
                PanelPorcentagemTarifas.Visible = true;
                requiredTarifa.Enabled = true;
            }
            else
            {
                DropStatusTarif.Visible = true;
                txtStatusTarifa.Visible = false;
                lblTotalTarifaTXT.Visible = false;
                txtStatusTarifaTotal.Visible = false;
                txtPorcentagemTaxa.Enabled = false;
                txtPorcentagemImposto.Enabled = false;
                txtStatusTarifa.Text = "";
                txtStatusTarifaTotal.Text = "";
                txtPorcentagemImposto.Text = "0";
                txtPorcentagemTaxa.Text = "0";
                PanelPorcentagemTarifas.Visible = false;
                requiredTarifa.Enabled = false;
            }
        }

        protected void txtPorcentagemTaxa_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (!u.ValidaNumerosInteiros(txtPorcentagemImposto.Text) || !u.ValidaNumerosInteiros(txtPorcentagemTaxa.Text))
            {
                lblErroStatusValorTarifa.Text = "Digite somente números.";
                return;
            }
            else
            {
                lblErroStatusValorTarifa.Text = "";
            }

            if (ddlTipoCadastro.SelectedItem.Text.Equals("Valor"))
            {
                if (!txtStatusTarifa.Text.Equals(""))
                {
                    if (!txtPorcentagemTaxa.Equals(""))
                    {
                        double valortarifa = Convert.ToDouble(txtStatusTarifa.Text);
                        double valortotalComTaxa = (valortarifa * Convert.ToDouble(txtPorcentagemTaxa.Text)) / 100;

                        double d = Convert.ToDouble(valortarifa + valortotalComTaxa);
                        txtStatusTarifaTotal.Text = d.ToString("N2");

                        double valortarifa2 = Convert.ToDouble(txtStatusTarifaTotal.Text);
                        double valortotalComImposto = (valortarifa2 * Convert.ToDouble(txtPorcentagemImposto.Text)) / 100;

                        double d2 = Convert.ToDouble(valortarifa2 + valortotalComImposto);
                        txtStatusTarifaTotal.Text = d2.ToString("N2");

                        PeriodosDAL perd = new PeriodosDAL();

                        S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                        string div = ConfigurationManager.AppSettings["PkgPerNight"];


                        if (smp.S_Mercado_Estacao.S_mercado_estacao_pacote == true && div.Equals("Y") && chkDividePacote.Checked == true)
                        {
                            if (smp.MinimoNoites.MinimoNoites_qtd == null)
                            {
                                lblMsgAddTarifa.Text = "Pacote sem quantidade de noites cadastrada para divisão.";
                            }
                            else
                            {
                                txtComissao_TextChanged(sender, e);

                                txtStatusTarifaTotal.Text = (Convert.ToDouble(txtStatusTarifaTotal.Text) / smp.MinimoNoites.MinimoNoites_qtd).ToString("N2");

                                txtStatusTarifa.Text = (Convert.ToDouble(txtStatusTarifa.Text) / smp.MinimoNoites.MinimoNoites_qtd).ToString("N2");

                                lblMsgAddTarifa.Text = "";

                                //chkDividePacote.Checked = false;
                            }
                        }


                    }
                    else
                    {
                        txtStatusTarifa.Text = "";
                    }
                }
                else
                {
                    MostrarMsg("Favor digitar o valor da tarifa antes das taxas.");
                }
            }
        }

        protected void txtStatusTarifa_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (txtStatusTarifa.Text != "")
            {
                if (u.ValidaNumeroComVirgula(txtStatusTarifa.Text))
                {
                    txtPorcentagemTaxa_TextChanged(sender, e);

                    PeriodosDAL perd = new PeriodosDAL();

                    S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                    if (smp.S_Mercado_Estacao.S_mercado_estacao_pacote == null)
                    {
                        txtComissao_TextChanged(sender, e);
                    }

                    lblErroStatusValorTarifa.Text = "";
                }
                else
                {
                    lblErroStatusValorTarifa.Text = "Digitar somente números.";
                    lblErroStatusValorTarifa.ForeColor = System.Drawing.Color.Red;
                    return;
                }
            }

        }

        protected void txtComissao_TextChanged(object sender, EventArgs e)
        {

            Utils u = new Utils();

            if (!u.ValidaNumerosInteiros(txtComissao.Text))
            {
                lblErroStatusValorTarifa.Text = "Digite somente números.";
                return;
            }
            else
            {
                lblErroStatusValorTarifa.Text = "";
            }

            if (ddlTipoCadastro.SelectedItem.Text.Equals("Valor"))
            {
                if (txtStatusTarifa.Text != "")
                {

                    PeriodosDAL perd = new PeriodosDAL();

                    S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                    if (smp.S_Mercado_Estacao.S_mercado_estacao_pacote == null)
                    {
                        txtPorcentagemTaxa_TextChanged(sender, e);
                    }

                    double valortarifa = Convert.ToDouble(txtStatusTarifa.Text);
                    double valortotalComComissao = (valortarifa * Convert.ToDouble(txtComissao.Text)) / 100;

                    double d = Convert.ToDouble(Convert.ToDouble(txtStatusTarifaTotal.Text) - valortotalComComissao);
                    txtStatusTarifaTotal.Text = d.ToString("N2");
                }
                else
                {
                    MostrarMsg("Favor digitar o valor da tarifa antes das taxas.");
                }
            }
        }

        protected void AtualizarTaxas(object sender, ImageClickEventArgs e)
        {
            lblMsgAddTarifa.Text = "";
            txtPorcentagemTaxa_TextChanged(sender, e);
            txtComissao_TextChanged(sender, e);
        }

        protected void RdoTarifa_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (RdoTarifa.SelectedValue.Equals("1"))
            {
                ViewState["TipoTarifa"] = "Apartamento";
                txtStatusTarifa_TextChanged(sender, e);
            }
            else
            {
                ViewState["TipoTarifa"] = "";
                ViewState["ValorSemDivisao"] = null;
                txtStatusTarifa.ToolTip = "";
                txtStatusTarifa_TextChanged(sender, e);
            }
        }

        protected void DropTipoRoom_SelectedIndexChanged(object sender, EventArgs e)
        {
            //RdoTarifa_SelectedIndexChanged(sender, e);
            //txtStatusTarifa_TextChanged(sender, e);
            //txtPorcentagemImposto.Text = "0";
            //txtPorcentagemTaxa.Text = "0";
            //txtComissao.Text = "0";
            txtStatusTarifa.Text = "";
            txtStatusTarifaTotal.Text = "";
            lblErroStatusValorTarifa.Text = "";
            lblMsgAddTarifa.Text = "";
        }

        protected void SalvarTarifa(object sender, EventArgs e)
        {
            try
            {
                chkDividePacote.Checked = false;

                //Começa processo cadastro da tarifa
                S_Mercado_Tarifa mt = new S_Mercado_Tarifa();

                //Verifica se algum periodo foi selecionado
                if (Session["PeriodoIDTarifas"] == null)
                {
                    MostrarMsg("Favor selecionar periodo.");
                    return;
                }

                //Verifica se é valor ou status tarifa
                if (txtStatusTarifa.Text != "")
                {
                    mt.S_merc_tarif_tarifa = Convert.ToDecimal(txtStatusTarifa.Text);
                    mt.S_merc_tarif_tarifa_total = Convert.ToDecimal(txtStatusTarifaTotal.Text);
                    mt.S_merc_tarif_porc_taxa = Convert.ToDecimal(txtPorcentagemTaxa.Text);
                    mt.S_merca_tarif_porc_imposto = Convert.ToDecimal(txtPorcentagemImposto.Text);
                    mt.S_merca_tarif_porc_comissao = Convert.ToDecimal(txtComissao.Text);

                    if (txtStatusTarifa.Text == "")
                    {
                        MostrarMsg("Favor informar a tarifa.");
                        return;
                    }
                }
                else
                {
                    mt.S_merc_tarif_status_id = Convert.ToInt32(DropStatusTarif.SelectedValue);
                }


                mt.Tipo_room_id = Convert.ToInt32(DropTipoRoom.SelectedValue);
                mt.Tarif_categoria_id = Convert.ToInt32(DropCategoria.SelectedValue);
                mt.S_mercado_tipo_tarifa_id = Convert.ToInt32(DropTipoTarifa.SelectedValue);
                mt.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);

                //Grava o id da política de CHD caso esteja com check box Checked
                //if (ViewState["IdPoliticaCHD"] != null && chkPoliticaChd.Checked == true)
                //{
                //    mt.S_politicaCHD_id = Convert.ToInt32(ViewState["IdPoliticaCHD"]);
                //}
                //else
                //{
                //    mt.S_politicaCHD_id = null;
                //}


                if (RdoTarifa.SelectedValue.Equals("0"))
                {
                    mt.S_merc_tarif_porPessoa = true;
                    mt.S_merc_tarif_porApartamento = null;
                }
                else
                {
                    mt.S_merc_tarif_porApartamento = true;
                    mt.S_merc_tarif_porPessoa = null;
                }

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();
                PeriodosDAL perd = new PeriodosDAL();

                S_Mercado_Periodo smp = perd.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                S_Mercado_Tarifa smtt = mtd.ObterPrimeiroPorPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                if (RdoTarifa.SelectedValue.Equals("0"))
                {
                    if (smtt != null)
                    {
                        if (smtt.S_merc_tarif_porPessoa != true)
                        {
                            MostrarMsg("Esse período só cadastra tarifa por pessoa.");
                            return;
                        }
                    }
                }
                else
                {
                    if (smtt != null)
                    {
                        if (smtt.S_merc_tarif_porApartamento != true)
                        {
                            MostrarMsg("Esse período só cadastra tarifa por apartamento.");
                            return;
                        }
                    }
                }

                SBasesDAL sbd = new SBasesDAL();
                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {
                    //Salva tarifa
                    txtPorcentagemTaxa_TextChanged(sender, e);
                    txtComissao_TextChanged(sender, e);


                    mtd.Salvar(mt);
                    MostrarMsg("Cadastro efetuado com sucesso.");

                    ViewState["ValorPkgPerNight"] = "";

                    SalvarTarifaBase(mt.S_merc_tarif_id);
                }
                else if (!mtd.VerificaTarifaCadastrada(mt))
                {

                    //Salva tarifa
                    txtPorcentagemTaxa_TextChanged(sender, e);
                    txtComissao_TextChanged(sender, e);


                    mtd.Salvar(mt);
                    MostrarMsg("Cadastro efetuado com sucesso.");

                    ViewState["ValorPkgPerNight"] = "";
                }
                else
                {
                    MostrarMsg("Tarifa já cadastrada, tente outra.");
                    return;
                }

                CarregarDadosTarifas(sender, e, "Nome");

                chkDividePacote.Checked = true;
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void AtualizarTarifa(object sender, EventArgs e)
        {
            try
            {

                S_Mercado_Tarifa mt = new S_Mercado_Tarifa();

                if (ViewState["IdTarifa"] != null)
                {
                    mt.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifa"]);
                }
                else
                {
                    MostrarMsg("Selecione uma tarifa para atualizar.");
                    return;
                }

                if (txtStatusTarifa.Text != "")
                {
                    mt.S_merc_tarif_tarifa = Convert.ToDecimal(txtStatusTarifa.Text);
                    mt.S_merc_tarif_tarifa_total = Convert.ToDecimal(txtStatusTarifaTotal.Text);
                    mt.S_merc_tarif_porc_taxa = Convert.ToDecimal(txtPorcentagemTaxa.Text);
                    mt.S_merca_tarif_porc_imposto = Convert.ToDecimal(txtPorcentagemImposto.Text);
                    mt.S_merca_tarif_porc_comissao = Convert.ToDecimal(txtComissao.Text);

                    if (txtStatusTarifa.Text == "")
                    {
                        MostrarMsg("Favor informar a tarifa.");
                        return;
                    }
                }
                else
                {
                    mt.S_merc_tarif_status_id = Convert.ToInt32(DropStatusTarif.SelectedValue);
                }


                mt.Tipo_room_id = Convert.ToInt32(DropTipoRoom.SelectedValue);
                mt.Tarif_categoria_id = Convert.ToInt32(DropCategoria.SelectedValue);
                mt.S_mercado_tipo_tarifa_id = Convert.ToInt32(DropTipoTarifa.SelectedValue);
                mt.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);

                if (RdoTarifa.SelectedValue.Equals("0"))
                {
                    mt.S_merc_tarif_porPessoa = true;
                    mt.S_merc_tarif_porApartamento = null;
                }
                else
                {
                    mt.S_merc_tarif_porApartamento = true;
                    mt.S_merc_tarif_porPessoa = null;
                }

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();

                S_Mercado_Tarifa smtt = mtd.ObterPrimeiroPorPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                if (RdoTarifa.SelectedValue.Equals("0"))
                {
                    if (smtt.S_merc_tarif_porPessoa != true)
                    {
                        MostrarMsg("Esse período só cadastra tarifa por pessoa.");
                        return;
                    }
                }
                else
                {
                    if (smtt.S_merc_tarif_porApartamento != true)
                    {
                        MostrarMsg("Esse período só cadastra tarifa por apartamento.");
                        return;
                    }
                }

                TarifaDAL s = new TarifaDAL();

                s.Atualizar(mt);
                MostrarMsg("Tarifa atualizada com sucesso.");
                CarregarDadosTarifas(sender, e, "Nome");
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void ExluirTarifa(object sender, CommandEventArgs e)
        {
            try
            {
                TarifaDAL t = new TarifaDAL();
                STarifaBaseDAL stbd = new STarifaBaseDAL();
                SBasesDAL sbd = new SBasesDAL();

                S_Mercado_Tarifa s = t.ObterPorId(Convert.ToInt32(e.CommandArgument));

                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {
                    S_Tarifa_Base st = stbd.ObterPorIdTarifa(Convert.ToInt32(e.CommandArgument));
                    stbd.Excluir(st);
                }

                t.Excluir(s);
                MostrarMsg("Tarifa excluída com sucesso.");
                CarregarDadosTarifas(sender, e, "Nome");
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        //protected void ExcluirTarifa(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (ViewState["IdTarifa"] != null)
        //        {
        //            TarifaDAL t = new TarifaDAL();
        //            STarifaBaseDAL stbd = new STarifaBaseDAL();
        //            SBasesDAL sbd = new SBasesDAL();

        //            S_Mercado_Tarifa s = t.ObterPorId(Convert.ToInt32(ViewState["IdTarifa"]));

        //            if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
        //            {
        //                S_Tarifa_Base st = stbd.ObterPorIdTarifa(Convert.ToInt32(ViewState["IdTarifa"]));
        //                stbd.Excluir(st);
        //            }

        //            t.Excluir(s);
        //            MostrarMsg("Tarifa excluída com sucesso.");
        //            CarregarDadosTarifas(sender, e, "Nome");
        //        }
        //        else
        //        {
        //            MostrarMsg("Selecione uma tarifa para excluir.");
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        lblMsgAddTarifa.Text = ex.Message;
        //    }
        //}

        protected void SalvarTarifaBase(int IdTarifa)
        {
            try
            {
                S_Tarifa_Base st = new S_Tarifa_Base();
                STarifaBaseDAL std = new STarifaBaseDAL();


                st.Base_id = Convert.ToInt32(ViewState["IdTarifaBase"]);
                st.S_merc_tarif_id = IdTarifa;
                std.Salvar(st);


            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void GridTarifas_SelectedIndexChanged(object sender, EventArgs e)
        {
            ViewState["IdTarifa"] = GridTarifas.SelectedRow.Cells[0].Text;

            BuscaTarifa(sender, e, Convert.ToInt32(GridTarifas.SelectedRow.Cells[0].Text));

            lblMsgAddTarifa.Text = "";
        }

        protected void GridTarifas_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {

                PeriodosDAL pd = new PeriodosDAL();
                MercadoEstacaoDAL mec = new MercadoEstacaoDAL();

                MercadoTarifaDAL mt = new MercadoTarifaDAL();
                SPoliticaCHDTarifasDAL spd = new SPoliticaCHDTarifasDAL();
                SPoliticaTCTarifasDAL spc = new SPoliticaTCTarifasDAL();

                foreach (GridViewRow item in GridTarifas.Rows)
                {
                    int IdTarifa = Convert.ToInt32(item.Cells[0].Text);
                    ImageButton OpenPoliticaCHD = (ImageButton)item.FindControl("OpenPoliticaCHD");
                    ImageButton OpenPoliticaTC = (ImageButton)item.FindControl("OpenPoliticaTC");

                    if (spd.ObterPorId(Convert.ToInt32(IdTarifa)) != null)
                    { OpenPoliticaCHD.ImageUrl = "~/images/Icones/politicaCHD.png"; }
                    else
                    { OpenPoliticaCHD.ImageUrl = "~/images/Icones/politicaCHDS.png"; }

                    if (spc.ObterPorId(Convert.ToInt32(IdTarifa)) != null)
                    { OpenPoliticaTC.ImageUrl = "~/images/Icones/icon_tour.png"; }
                    else
                    { OpenPoliticaTC.ImageUrl = "~/images/Icones/icon_tourS.png"; }
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void BuscaTarifa(object sender, EventArgs e, int tarifaID)
        {
            try
            {

                TarifaDAL t = new TarifaDAL();

                S_Mercado_Tarifa mt = t.ObterPorId(tarifaID);

                if (mt.S_merc_tarif_tarifa != null)
                {
                    //lnkVoltarStatus_Click(sender, e);
                    ddlTipoCadastro.SelectedValue = "Valor";
                    MudaTipoCadastro(sender, e);
                    txtStatusTarifa.Text = Convert.ToString(mt.S_merc_tarif_tarifa);
                    txtStatusTarifaTotal.Text = Convert.ToString(mt.S_merc_tarif_tarifa_total);

                    if (mt.S_merca_tarif_porc_imposto == null)
                    {
                        txtPorcentagemImposto.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemImposto.Text = Convert.ToString(mt.S_merca_tarif_porc_imposto);
                    }

                    if (mt.S_merc_tarif_porc_taxa == null)
                    {
                        txtPorcentagemTaxa.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemTaxa.Text = Convert.ToString(mt.S_merc_tarif_porc_taxa);
                    }

                    if (mt.S_merca_tarif_porc_comissao == null)
                    {
                        txtComissao.Text = "0";
                    }
                    else
                    {
                        txtComissao.Text = Convert.ToString(mt.S_merca_tarif_porc_comissao);
                    }
                }
                else
                {
                    DropStatusTarif.SelectedValue = Convert.ToString(mt.S_merc_tarif_status_id);
                    ddlTipoCadastro.SelectedValue = "Status";
                    MudaTipoCadastro(sender, e);
                    //chkValor_CheckedChanged(sender, e);
                }


                DropCategoria.SelectedValue = Convert.ToString(mt.Tarif_categoria_id);
                DropTipoRoom.SelectedValue = Convert.ToString(mt.Tipo_room_id);
                DropTipoTarifa.SelectedValue = Convert.ToString(mt.S_mercado_tipo_tarifa_id);

                if (mt.S_merc_tarif_porPessoa == true)
                {
                    RdoTarifa.SelectedValue = "0";
                }
                else
                {
                    RdoTarifa.SelectedValue = "1";
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void AddCategoria(object sender, EventArgs e)
        {
            DropCategoria.Visible = false;
            txtAddCategoria.Visible = true;
            btnAddCategoria.Visible = true;
            lnkCancelCategoria.Visible = true;
        }

        protected void CancelCategoria(object sender, EventArgs e)
        {
            txtAddCategoria.Visible = false;
            btnAddCategoria.Visible = false;
            DropCategoria.Visible = true;
            lnkCancelCategoria.Visible = false;
        }

        protected void SelectCategoria(object sender, EventArgs e)
        {
            TarifCategoriaDAL t = new TarifCategoriaDAL();

            Tarif_Categoria tc = t.ObterPorNome(txtAddCategoria.Text);

            //for (int i = 0; i < DropCategoria.Items.Count; i++)
            //{
            //    if (DropCategoria.Items[i].ToString() == tc.Tarif_categoria_id.ToString())
            //    {
            //        DropCategoria.SelectedIndex = i;
            //        DropCategoria.SelectedValue = Convert.ToString(tc.Tarif_categoria_id);
            //        break;

            //    }
            //    else
            //    {
            //        DropCategoria.Items.Insert(0, new ListItem(tc.Tarif_categoria_nome, Convert.ToString(tc.Tarif_categoria_id)));
            //        break;
            //    }
            //}

            DropCategoria.Items.Insert(0, new ListItem(tc.Tarif_categoria_nome, Convert.ToString(tc.Tarif_categoria_id)));
            DropCategoria.SelectedValue = Convert.ToString(tc.Tarif_categoria_id);
            DropCategoria.Visible = true;
            txtAddCategoria.Text = "";
            txtAddCategoria.Visible = false;
            btnAddCategoria.Visible = false;
        }

        protected void SalvarCategoria(object sender, EventArgs e)
        {
            try
            {
                Tarif_Categoria t = new Tarif_Categoria();
                TarifCategoriaDAL tc = new TarifCategoriaDAL();

                if (txtAddCategoria.Text.Equals(""))
                {
                    MostrarMsg("Nenhuma categoria foi escrita ou selecionada.");
                    return;
                }

                if (!tc.VerificaExistente(txtAddCategoria.Text))
                {
                    t.Tarif_categoria_nome = txtAddCategoria.Text;
                    tc.Salvar(t);
                    MostrarMsg("Categoria cadastrada com sucesso.");
                    txtAddCategoria.Visible = false;
                    btnAddCategoria.Visible = false;
                    DropCategoria.Visible = true;
                    SelectCategoria(sender, e);
                    txtAddCategoria.Text = "";
                }
                else
                {
                    MostrarMsg("Categoria já existente, tente outra.");
                    return;
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        [WebMethod]
        public static List<string> SearchCategorias(string prefixText)
        {
            try
            {
                TarifCategoriaDAL t = new TarifCategoriaDAL();
                List<Tarif_Categoria> tc = t.ListarTodos(prefixText);

                List<string> lista = new List<string>();

                foreach (Tarif_Categoria p in tc)
                {
                    lista.Add(p.Tarif_categoria_nome);
                }

                return lista;
            }
            catch
            {
                throw;
            }
        }

        #endregion

        #region Regras Meal

        protected void MudaTipoCadastroMeal(object sender, EventArgs e)
        {
            if (ddlTipoCadastroMeal.SelectedValue.Equals("Status"))
            {
                DropStatusMeal.Visible = true;
                txtStatusMeal.Visible = false;
                //chkValorMeal.Visible = false;
                //lnkVoltarStatusMeal.Visible = true;
                lblTotalMealTXT.Visible = false;
                txtStatusMealTotal.Visible = false;
                txtPorcentagemTaxaMeal.Enabled = false;
                txtPorcentagemImpostoMeal.Enabled = false;
                txtStatusMeal.Text = "";
                txtStatusMealTotal.Text = "";
                txtPorcentagemImpostoMeal.Text = "0";
                txtPorcentagemTaxaMeal.Text = "0";
                PanelPorcentagemMeal.Visible = false;
                requiredStatusMeal.Enabled = false;
            }
            else
            {
                DropStatusMeal.Visible = false;
                txtStatusMeal.Visible = true;
                txtStatusMealTotal.Visible = true;
                lblTotalMealTXT.Visible = true;
                //chkValorMeal.Visible = true;
                //chkValorMeal.Checked = false;
                //lnkVoltarStatusMeal.Visible = false;
                txtStatusMeal.Text = "";
                txtStatusMealTotal.Text = "";
                txtPorcentagemTaxaMeal.Enabled = true;
                txtPorcentagemImpostoMeal.Enabled = true;
                PanelPorcentagemMeal.Visible = true;
                requiredStatusMeal.Enabled = true;
            }
        }

        protected void txtPorcentagemTaxaMeal_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (!u.ValidaNumerosInteiros(txtPorcentagemTaxaMeal.Text) || !u.ValidaNumerosInteiros(txtPorcentagemImpostoMeal.Text))
            {
                lblErroStatusValorMeal.Text = "Digite somente números.";
                return;
            }
            else
            {
                lblErroStatusValorTarifa.Text = "";
            }

            if (ddlTipoCadastro.SelectedItem.Text.Equals("Valor"))
            {
                if (!txtStatusMeal.Text.Equals(""))
                {
                    double valortarifa = Convert.ToDouble(txtStatusMeal.Text);
                    double valortotalComTaxa = (valortarifa * Convert.ToDouble(txtPorcentagemTaxaMeal.Text)) / 100;

                    double d = Convert.ToDouble(valortarifa + valortotalComTaxa);
                    txtStatusMealTotal.Text = d.ToString("N2");

                    double valortarifa2 = Convert.ToDouble(txtStatusMealTotal.Text);
                    double valortotalComImposto = (valortarifa2 * Convert.ToDouble(txtPorcentagemImpostoMeal.Text)) / 100;

                    double d2 = Convert.ToDouble(valortarifa2 + valortotalComImposto);
                    txtStatusMealTotal.Text = d2.ToString("N2");
                }
                else
                {
                    MostrarMsg("Favor digitar o valor da tarifa antes das taxas.");
                }
            }

        }

        protected void txtPorcentagemImpostoMeal_TextChanged(object sender, EventArgs e)
        {
            txtPorcentagemTaxaMeal_TextChanged(sender, e);
            double valortarifa = Convert.ToDouble(txtStatusMealTotal.Text);
            double valortotalComImposto = (valortarifa * Convert.ToDouble(txtPorcentagemImpostoMeal.Text)) / 100;

            double d = Convert.ToDouble(valortarifa + valortotalComImposto);
            txtStatusMealTotal.Text = d.ToString("N2");
        }

        protected void txtStatusMeal_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (u.ValidaNumeroComVirgula(txtStatusMeal.Text))
            {
                txtPorcentagemTaxaMeal_TextChanged(sender, e);
                txtPorcentagemImpostoMeal_TextChanged(sender, e);
                lblErroStatusValorMeal.Text = "";
            }
            else
            {
                lblErroStatusValorMeal.Text = "Digitar somente números.";
                lblErroStatusValorMeal.ForeColor = System.Drawing.Color.Red;
            }

        }

        protected void SalvarMeal(object sender, EventArgs e)
        {
            try
            {
                S_Mercado_Meal sm = new S_Mercado_Meal();

                if (Session["PeriodoIDTarifas"] == null)
                {
                    MostrarMsg("Favor selecionar periodo.");
                    return;
                }

                if (txtStatusMeal.Text != "")
                {
                    sm.S_merc_meal_tarifa = Convert.ToDecimal(txtStatusMeal.Text);
                    sm.S_merc_meal_tarifa_total = Convert.ToDecimal(txtStatusMealTotal.Text);
                    sm.S_merca_meal_porc_imposto = Convert.ToDecimal(txtPorcentagemImpostoMeal.Text);
                    sm.S_merc_meal_porc_taxa = Convert.ToDecimal(txtPorcentagemTaxaMeal.Text);
                    if (txtStatusMeal.Text == "")
                    {
                        MostrarMsg("Favor informar a tarifa.");
                        return;
                    }
                }
                else
                {
                    sm.S_merc_tarif_status_id = Convert.ToInt32(DropStatusMeal.SelectedValue);
                }

                sm.S_meal_id = Convert.ToInt32(DropMeal.SelectedValue);
                sm.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);


                MealDAL ml = new MealDAL();

                SBasesDAL sbd = new SBasesDAL();
                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {
                    txtPorcentagemTaxa_TextChanged(sender, e);
                    txtComissao_TextChanged(sender, e);

                    ml.Salvar(sm);

                    SalvarMealBase(sm.S_merc_meal_id);

                    MostrarMsg("Cadastro efetuado com sucesso.");
                }
                else if (!ml.VerificaMealCadastrado(sm))
                {
                    ml.Salvar(sm);
                    MostrarMsg("Cadastro efetuado com sucesso.");
                }
                else
                {
                    MostrarMsg("Meal já cadastrado, tente outro.");
                }

                CarregarDadosMeal(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = ex.Message;
            }
        }

        protected void AtualizarMeal(object sender, EventArgs e)
        {

            try
            {

                S_Mercado_Meal sm = new S_Mercado_Meal();

                if (ViewState["IdMeal"] != null)
                {
                    sm.S_merc_meal_id = Convert.ToInt32(ViewState["IdMeal"]);
                }
                else
                {
                    MostrarMsg("Selecione um meal para ser atualizado.");
                    return;
                }

                if (Session["PeriodoIDTarifas"] == null)
                {
                    MostrarMsg("Favor selecionar periodo.");
                    return;
                }

                if (txtStatusMeal.Text != "")
                {
                    sm.S_merc_meal_tarifa = Convert.ToDecimal(txtStatusMeal.Text);
                    sm.S_merc_meal_tarifa_total = Convert.ToDecimal(txtStatusMealTotal.Text);
                    sm.S_merca_meal_porc_imposto = Convert.ToDecimal(txtPorcentagemImposto.Text);
                    sm.S_merc_meal_porc_taxa = Convert.ToDecimal(txtPorcentagemTaxa.Text);
                    if (txtStatusMeal.Text == "")
                    {
                        MostrarMsg("Favor informar a tarifa.");
                        return;
                    }
                }
                else
                {
                    sm.S_merc_tarif_status_id = Convert.ToInt32(DropStatusMeal.SelectedValue);
                }

                sm.S_meal_id = Convert.ToInt32(DropMeal.SelectedValue);
                sm.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);


                MealDAL ml = new MealDAL();

                ml.Atualizar(sm);

                MostrarMsg("Meal atualizado com sucesso.");
                CarregarDadosMeal(sender, e);

            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = ex.Message;
            }

        }

        protected void ExluirMeal(object sender, CommandEventArgs e)
        {
            try
            {
                MealDAL m = new MealDAL();
                STarifaBaseDAL stbd = new STarifaBaseDAL();
                SBasesDAL sbd = new SBasesDAL();

                S_Mercado_Meal mm = m.ObterPorId(Convert.ToInt32(e.CommandArgument));

                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {
                    S_Tarifa_Base st = stbd.ObterPorIdMeal(Convert.ToInt32(e.CommandArgument));
                    stbd.Excluir(st);
                }

                m.Excluir(mm);
                MostrarMsg("Meal excluído com sucesso.");
                CarregarDadosMeal(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = ex.Message;
            }
        }

        protected void SalvarMealBase(int IdMealTarifa)
        {
            try
            {
                S_Tarifa_Base st = new S_Tarifa_Base();
                STarifaBaseDAL std = new STarifaBaseDAL();


                st.Base_id = Convert.ToInt32(ViewState["IdTarifaBase"]);
                st.S_merc_meal_id = IdMealTarifa;
                std.Salvar(st);

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void GridMeal_SelectedIndexChanged(object sender, EventArgs e)
        {
            ViewState["IdMeal"] = GridMeal.SelectedRow.Cells[0].Text;

            BuscaMeal(sender, e, Convert.ToInt32(GridMeal.SelectedRow.Cells[0].Text));

            lblMsgAddMeal.Text = "";
        }

        protected void BuscaMeal(object sender, EventArgs e, int MercadoMealID)
        {
            try
            {

                MealDAL t = new MealDAL();

                S_Mercado_Meal mt = t.ObterPorId(MercadoMealID);

                if (mt.S_merc_meal_tarifa != null)
                {
                    //lnkVoltarStatusMeal_Click(sender, e);
                    ddlTipoCadastroMeal.SelectedValue = "Valor";
                    MudaTipoCadastroMeal(sender, e);
                    txtStatusMeal.Text = Convert.ToString(mt.S_merc_meal_tarifa);
                    txtStatusMealTotal.Text = Convert.ToString(mt.S_merc_meal_tarifa_total);

                    if (mt.S_merca_meal_porc_imposto == null)
                    {
                        txtPorcentagemImpostoMeal.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemImpostoMeal.Text = Convert.ToString(mt.S_merca_meal_porc_imposto);
                    }

                    if (mt.S_merc_meal_porc_taxa == null)
                    {
                        txtPorcentagemTaxaMeal.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemTaxaMeal.Text = Convert.ToString(mt.S_merc_meal_porc_taxa);
                    }
                }
                else
                {
                    DropStatusMeal.SelectedValue = Convert.ToString(mt.S_merc_tarif_status_id);
                    //chkValorMeal_CheckedChanged(sender, e);
                    ddlTipoCadastroMeal.SelectedValue = "Status";
                    MudaTipoCadastroMeal(sender, e);
                }


                DropMeal.SelectedValue = Convert.ToString(mt.S_meal_id);

            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = ex.Message;
            }
        }

        protected void AtualizarTaxasMeal(object sender, ImageClickEventArgs e)
        {
            lblMsgAddMeal.Text = "";
            txtPorcentagemTaxaMeal_TextChanged(sender, e);
        }

        protected void chkAddFile_CheckedChanged(object sender, EventArgs e)
        {
            try
            {

                foreach (GridViewRow item in GridMeal.Rows)
                {

                    CheckBox chkAddFile = (CheckBox)item.FindControl("chkAddFile");

                    int IdMeal = Convert.ToInt32(item.Cells[0].Text);

                    if (chkAddFile.Checked)
                    {
                        MealDAL md = new MealDAL();

                        S_Mercado_Meal smm = md.ObterPorId(IdMeal);

                        S_Mercado_Meal mnew = new S_Mercado_Meal();

                        mnew.AddFile = true;
                        mnew.S_merc_meal_id = smm.S_merc_meal_id;

                        md.AtualizarAddFile(mnew);
                    }
                    else
                    {
                        MealDAL md = new MealDAL();

                        S_Mercado_Meal smm = md.ObterPorId(IdMeal);

                        S_Mercado_Meal mnew = new S_Mercado_Meal();

                        mnew.AddFile = null;
                        mnew.S_merc_meal_id = smm.S_merc_meal_id;

                        md.AtualizarAddFile(mnew);
                    }

                }

            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        #endregion

        #region Regras Politica CHD

        protected void LimpaModalPoliticaCHD()
        {
            txtValorPoliticaCHD.Text = "";
            ddlIdadeChdsAte.SelectedValue = "1";
            ddlIdadeChdsDe.SelectedValue = "1";
            ddlQtdChds.SelectedValue = "1";
            ddlTipoValorPoliticaCHD.SelectedValue = "0";
        }

        protected void PopularDropQtdCHD()
        {
            try
            {
                for (int i = 1; i < 11; i++)
                {
                    ListItem li = new ListItem();
                    li.Text = i.ToString();
                    li.Value = i.ToString();
                    ddlQtdChds.Items.Add(li);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void PopularDropIdadeCHDAte()
        {
            try
            {
                for (int i = 1; i < 19; i++)
                {
                    ListItem li = new ListItem();
                    li.Text = i.ToString();
                    li.Value = i.ToString();
                    ddlIdadeChdsAte.Items.Add(li);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void PopularDropIdadeCHDDe()
        {
            try
            {
                for (int i = 0; i < 19; i++)
                {
                    ListItem li = new ListItem();
                    li.Text = i.ToString();
                    li.Value = i.ToString();
                    ddlIdadeChdsDe.Items.Add(li);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void PopularGridPoliticasCHDCadastro(int IdTarifaCHD)
        {
            try
            {
                SPoliticaChdDAL spd = new SPoliticaChdDAL();

                if (IdTarifaCHD == 0)
                {
                    GridPoliticasCHDCadastro.DataSource = spd.ListarTodos();
                    GridPoliticasCHDCadastro.DataBind();
                }
                else
                {
                    GridPoliticasCHDCadastro.DataSource = spd.ListarTodos(IdTarifaCHD);
                    GridPoliticasCHDCadastro.DataBind();
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void SalvarPoliticaChd(object sender, EventArgs e)
        {
            try
            {
                SPoliticaChdDAL spd = new SPoliticaChdDAL();
                S_Politica_CHD ap = new S_Politica_CHD();


                if (!Convert.ToString(ViewState["IdPoliticaCHD"]).Equals(""))
                {
                    ap.S_politicaCHD_qtd = Convert.ToInt32(ddlQtdChds.SelectedValue);
                    ap.S_politicaCHD_idadeDe = Convert.ToInt32(ddlIdadeChdsDe.SelectedValue);
                    ap.S_politicaCHD_idade = Convert.ToInt32(ddlIdadeChdsAte.SelectedValue);
                    ap.S_politicaCHD_id = Convert.ToInt32(ViewState["IdPoliticaCHD"]);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaCHD.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaCHD_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaCHD_valor = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                        case 2:
                            ap.S_politicaCHD_percent = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                    }

                    spd.Atualizar(ap);
                    MostrarMsg("Política chd atualizada com sucesso.");

                    btnSalvarPoliticaChd.Text = "Salvar";

                    ViewState["IdPoliticaCHD"] = "";

                    LimpaModalPoliticaCHD();
                }
                else
                {
                    ap.S_politicaCHD_qtd = Convert.ToInt32(ddlQtdChds.SelectedValue);
                    ap.S_politicaCHD_idadeDe = Convert.ToInt32(ddlIdadeChdsDe.SelectedValue);
                    ap.S_politicaCHD_idade = Convert.ToInt32(ddlIdadeChdsAte.SelectedValue);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaCHD.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaCHD_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaCHD_valor = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                        case 2:
                            ap.S_politicaCHD_percent = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                    }

                    spd.Salvar(ap);
                    MostrarMsg("Política chd cadastrada com sucesso.");
                    LimpaModalPoliticaCHD();
                }

                PopularGridPoliticasCHDCadastro(0);
                ModalPopupExtenderPoliticaChd.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void SalvarPoliticaChdTarifa(object sender, EventArgs e)
        {
            try
            {
                SPoliticaCHDTarifasDAL spctd = new SPoliticaCHDTarifasDAL();
                SPoliticaChdDAL spd = new SPoliticaChdDAL();
                S_Politica_CHD spc = new S_Politica_CHD();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();

                decimal valPchd;

                if (txtValorPoliticaCHD.Text.Equals("")) valPchd = 0; else valPchd = Convert.ToDecimal(txtValorPoliticaCHD.Text);

                S_Politica_CHD spolitcachd = spd.VerificaExiste(Convert.ToInt32(ddlQtdChds.SelectedValue), Convert.ToInt32(ddlIdadeChdsAte.SelectedValue), Convert.ToInt32(ddlIdadeChdsDe.SelectedValue), Convert.ToInt32(ddlTipoValorPoliticaCHD.SelectedValue), valPchd, valPchd);

                if (spolitcachd != null)
                {
                    S_PoliticaCHDTarifas spct = new S_PoliticaCHDTarifas();

                    spct.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifaCHDSelect"]);
                    spct.S_politicaCHD_id = spolitcachd.S_politicaCHD_id;

                    spctd.Salvar(spct);
                }
                else
                {
                    S_Politica_CHD ap = new S_Politica_CHD();

                    ap.S_politicaCHD_qtd = Convert.ToInt32(ddlQtdChds.SelectedValue);
                    ap.S_politicaCHD_idadeDe = Convert.ToInt32(ddlIdadeChdsDe.SelectedValue);
                    ap.S_politicaCHD_idade = Convert.ToInt32(ddlIdadeChdsAte.SelectedValue);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaCHD.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaCHD_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaCHD_valor = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                        case 2:
                            ap.S_politicaCHD_percent = Convert.ToDecimal(txtValorPoliticaCHD.Text);
                            break;
                    }

                    spd.Salvar(ap);

                    S_PoliticaCHDTarifas spct = new S_PoliticaCHDTarifas();

                    spct.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifaCHDSelect"]);
                    spct.S_politicaCHD_id = ap.S_politicaCHD_id;

                    spctd.Salvar(spct);
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Registro cadastrado com sucesso.");

                PopularGridPoliticasCHDCadastro(Convert.ToInt32(ViewState["IdTarifaCHDSelect"]));

                ModalPopupExtenderPoliticaChd.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void SalvarPoliticaChdTodoPeriodo(object sender, EventArgs e)
        {
            try
            {

                SPoliticaCHDTarifasDAL spctd = new SPoliticaCHDTarifasDAL();
                SPoliticaChdDAL spd = new SPoliticaChdDAL();
                S_Politica_CHD spc = new S_Politica_CHD();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();

                int entro = 0;

                foreach (GridViewRow item in GridPoliticasCHDCadastro.Rows)
                {
                    CheckBox chkChecado = (CheckBox)item.FindControl("chkChecado");
                    Label lblIdPolitica = (Label)item.FindControl("lblIdPolitica");

                    if (chkChecado.Checked)
                    {
                        entro = 1;
                        foreach (S_Mercado_Tarifa MercadoTarifa in mtd.ListarTodosPorPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"])))
                        {
                            S_PoliticaCHDTarifas spct = new S_PoliticaCHDTarifas();

                            spct.S_merc_tarif_id = MercadoTarifa.S_merc_tarif_id;
                            spct.S_politicaCHD_id = Convert.ToInt32(lblIdPolitica.Text);

                            spctd.Salvar(spct);
                        }
                    }
                }

                if (entro == 0)
                {
                    MostrarMsg("Selecione ao menos uma políca CHD para adicionar.");
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Tarifas atualizadas com sucesso.");

                ModalPopupExtenderPoliticaChd.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void SalvarPoliticaChdTodoHotel(object sender, EventArgs e)
        {
            try
            {
                SPoliticaCHDTarifasDAL spctd = new SPoliticaCHDTarifasDAL();
                SPoliticaChdDAL spd = new SPoliticaChdDAL();
                S_Politica_CHD spc = new S_Politica_CHD();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();
                PeriodosDAL pd = new PeriodosDAL();

                int entro = 0;

                foreach (GridViewRow item in GridPoliticasCHDCadastro.Rows)
                {
                    CheckBox chkChecado = (CheckBox)item.FindControl("chkChecado");
                    Label lblIdPolitica = (Label)item.FindControl("lblIdPolitica");

                    if (chkChecado.Checked)
                    {
                        entro = 1;
                        foreach (S_Mercado_Periodo MercadoPeriodo in pd.ListarTodosPorSupplier(Convert.ToInt32(Session["Sid"])))
                        {

                            foreach (S_Mercado_Tarifa MercadoTarifa in mtd.ListarTodosPorPeriodo(MercadoPeriodo.S_merc_periodo_id))
                            {
                                S_PoliticaCHDTarifas spct = new S_PoliticaCHDTarifas();

                                spct.S_merc_tarif_id = MercadoTarifa.S_merc_tarif_id;
                                spct.S_politicaCHD_id = Convert.ToInt32(lblIdPolitica.Text);

                                spctd.Salvar(spct);
                            }

                        }
                    }

                }

                if (entro == 0)
                {
                    MostrarMsg("Selecione ao menos uma políca CHD para adicionar.");
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Tarifas atualizadas com sucesso.");

            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnPoliticaCHD_Click(object sender, EventArgs e)
        {
            //PanelPoliticaCHDGrid.Visible = true;

            PopularGridPoliticasCHDCadastro(0);

            btnSalvarPoliticaChd.Visible = true;
            //btnSalvarPoliticaChdTodoPeriodo.Visible = true;

            if (GridPoliticasCHDCadastro.Rows.Count > 0)
            {
                btnSalvarPoliticaChdTodoPeriodo.Visible = true;
                btnSalvarPoliticaChdTodoHotel.Visible = true;
            }

            ModalPopupExtenderPoliticaChd.Show();
        }

        protected void btnListPoliticaCHD_Click(object sender, EventArgs e)
        {
            try
            {
                //PanelPoliticaCHDGrid.Visible = true;

                //PopularGridPoliticaCHD();

                ModalPopupExtenderPoliticaChd.Show();
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void EditarPoliticaCHD(object sender, CommandEventArgs e)
        {
            try
            {
                int myid = Convert.ToInt32(e.CommandArgument);

                SPoliticaChdDAL spd = new SPoliticaChdDAL();

                S_Politica_CHD sp = spd.ObterPorId(myid);

                txtValorPoliticaCHD.Text = "";

                //PanelPoliticaCHDGrid.Visible = true;               

                ddlQtdChds.SelectedValue = sp.S_politicaCHD_qtd.ToString();
                ddlIdadeChdsAte.SelectedValue = sp.S_politicaCHD_idade.ToString();
                ddlIdadeChdsDe.SelectedValue = sp.S_politicaCHD_idadeDe.ToString();

                ViewState["IdPoliticaCHD"] = sp.S_politicaCHD_id;

                if (sp.S_politicaCHD_free != null)
                { ddlTipoValorPoliticaCHD.SelectedValue = "0"; }
                else if (sp.S_politicaCHD_valor != null)
                { ddlTipoValorPoliticaCHD.SelectedValue = "1"; txtValorPoliticaCHD.Text = sp.S_politicaCHD_valor.ToString(); }
                else if (sp.S_politicaCHD_percent != null)
                { ddlTipoValorPoliticaCHD.SelectedValue = "2"; txtValorPoliticaCHD.Text = sp.S_politicaCHD_percent.ToString(); }

                btnSalvarPoliticaChd.Text = "Atualizar";

                //MostrarMsg("Política de CHD atualizada.");
                //chkPoliticaChd.Checked = true;

                //btnSalvarPoliticaChdTodoPeriodo.Visible = true;
                //btnSalvarPoliticaChdTodoHotel.Visible = true;

                ModalPopupExtenderPoliticaChd.Show();
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void ExcluirPoliticaCHD(object sender, CommandEventArgs e)
        {
            try
            {

                SPoliticaCHDTarifasDAL spd = new SPoliticaCHDTarifasDAL();
                SPoliticaChdDAL scd = new SPoliticaChdDAL();

                int myid = Convert.ToInt32(e.CommandArgument);


                if (!Convert.ToString(ViewState["IdTarifaCHDSelect"]).Equals(""))
                {
                    S_PoliticaCHDTarifas s = spd.ObterPorId(Convert.ToInt32(ViewState["IdTarifaCHDSelect"]), myid);

                    spd.Excluir(s);
                }
                else
                {
                    if (spd.ObterPorIdOP(myid) != null)
                    {
                        MostrarMsg("Existe tarifas agregadas nesta política chd.");
                    }
                    else
                    {
                        S_Politica_CHD sd = scd.ObterPorId(myid);

                        scd.Excluir(sd);

                        MostrarMsg("Registro excluído com sucesso");
                    }
                }

                MostrarMsg("Registro excluído com sucesso.");
                ModalPopupExtenderPoliticaChd.Show();

                string test = ViewState["IdTarifaCHDSelect"].ToString();

                if (Convert.ToString(ViewState["IdTarifaCHDSelect"]).Equals(""))
                {
                    PopularGridPoliticasCHDCadastro(0);
                }
                else
                {
                    PopularGridPoliticasCHDCadastro(Convert.ToInt32(ViewState["IdTarifaCHDSelect"]));
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void OpenPoliticaCHD(object sender, CommandEventArgs e)
        {
            try
            {

                //PanelPoliticaCHDGrid.Visible = false;

                int myid = Convert.ToInt32(e.CommandArgument);

                ViewState["IdTarifaCHDSelect"] = myid;

                PopularGridPoliticasCHDCadastro(myid);

                btnSalvarPoliticaChd.Visible = false;
                btnSalvarPoliticaChdTodoHotel.Visible = false;
                btnSalvarPoliticaChdTodoPeriodo.Visible = false;
                btnSalvarPoliticaChdTarifa.Visible = true;

                ModalPopupExtenderPoliticaChd.Show();

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void chkPoliticaChd_CheckedChanged(object sender, EventArgs e)
        {
            if (ViewState["IdPoliticaCHD"] == null)
            {
                MostrarMsg("Favor selecione uma política de CHD ou cadastre uma nova.");
                //chkPoliticaChd.Checked = false;
            }
        }

        protected void btnRemoverPoliticaChd_Click(object sender, EventArgs e)
        {
            try
            {

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void FechaModalPoliticaCHD(object sender, EventArgs e)
        {
            ViewState["OpenSemPoliticaIdTarifa"] = null;
            ViewState["IdTarifaCHDSelect"] = "";

            ModalPopupExtenderPoliticaChd.Hide();
        }

        protected void AtualizaChdTarifa(object sender, CommandEventArgs e)
        {
            try
            {


            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }

        }

        #endregion

        #region Regras

        protected void PreencheTitulos()
        {

            Dictionary<string, string> titulos = (Dictionary<string, string>)Session["TitulosTarifas"];

            if (titulos != null)
            {
                lblSupplierTarifa.Text = Convert.ToString(Session["Snome"]);
                lblMercado.Text = titulos["Mercado"];
                lblBaseTarifaria.Text = titulos["Base"];
                lblResponsavel.Text = titulos["Responsavel"];
                lblMoeda.Text = titulos["Moeda"];

                if (!titulos["MinNoites"].Equals(""))
                {
                    lblMinNoites.Text = titulos["MinNoites"];
                    lblMinOrMand.Text = titulos["MinORMand"];
                }
                else
                {
                    lblMinNoites.Text = "";
                    lblMinOrMand.Text = "Nenhum";
                }

                if (!titulos["Promocao"].Equals(""))
                {
                    lblPromocao.Text = titulos["Promocao"];
                }
                else
                {
                    lblPromocao.Text = "Nenhum";
                }

            }
        }

        protected void CriticaSupplierTarifa(object sender, EventArgs e)
        {
            string view, sessao;
            view = ViewState["Sid"].ToString();
            sessao = Session["Sid"].ToString();

            if (view != sessao)
            {
                Response.Redirect("AddTarifa.aspx");
            }

        }

        protected void VerificaBase()
        {
            try
            {
                SBasesDAL sbd = new SBasesDAL();
                SupplierDAL sd = new SupplierDAL();

                if (sbd.ObterPorIdSupplier(Convert.ToInt32(ViewState["Sid"])).Count() != 0)
                {
                    PopulaGridBase();
                }
                else
                {
                    lblSemBaseTXT.Text = "Este supplier não tem base cadastrada.";
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void VerificaPromocoes()
        {
            try
            {
                PeriodosDAL p = new PeriodosDAL();

                S_Mercado_Periodo d = p.ObterPorIdPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"]));

                if (d.MinimoNoites_id != null)
                {
                    lblMinNoites.Text = Convert.ToString(d.MinimoNoites.MinimoNoites_qtd);

                    if (d.S_merc_periodo_minimo == true)
                    {
                        lblMinOrMand.Text = "Mínimo";
                    }
                    else
                    {
                        lblMinOrMand.Text = "Mandatório";
                    }
                }
                else
                {
                    lblMinOrMand.Text = "Nenhum";
                    lblMinNoites.Text = "";
                }

                if (d.Promocao_id != null)
                {
                    lblPromocao.Text = Convert.ToString(d.Promocao.Promocao_nome);
                }
                else
                {
                    lblPromocao.Text = "Nenhum";
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }

        }

        protected void AtualizarGridTarifas(object sender, EventArgs e)
        {
            CarregarTarifas(sender, e);
        }

        #endregion

        #region Politica TC

        protected void chkPoliticaTC_CheckedChanged(object sender, EventArgs e)
        {
            if (ViewState["IdPoliticaCHD"] == null)
            {
                MostrarMsg("Favor selecione uma política de TC ou cadastre uma nova.");
            }
        }

        protected void LimpaModalPoliticaTC()
        {
            txtValorPoliticaTC.Text = "";
            ddlQtdTCs.SelectedValue = "1";
            ddlTipoValorPoliticaTC.SelectedValue = "0";
        }

        protected void PopularDropPoliticaTC()
        {
            try
            {
                for (int i = 1; i < 11; i++)
                {
                    ListItem li = new ListItem();
                    li.Text = i.ToString();
                    li.Value = i.ToString();
                    ddlQtdTCs.Items.Add(li);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void PopularGridPoliticaTC(int idTarifaTC)
        {
            try
            {
                SPoliticaTCDAL spd = new SPoliticaTCDAL();

                if (idTarifaTC == 0)
                {
                    GridPoliticasTCCadastro.DataSource = spd.ListarTodos();
                    GridPoliticasTCCadastro.DataBind();
                }
                else
                {
                    GridPoliticasTCCadastro.DataSource = spd.ListarTodos(idTarifaTC);
                    GridPoliticasTCCadastro.DataBind();
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                Log.Save((trace.GetFrame(0).GetMethod().ReflectedType.FullName), ("Linha: " + trace.GetFrame(0).GetFileLineNumber()), ("Column: " + trace.GetFrame(0).GetFileColumnNumber()), ex.Message);

                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void btnTC_Click(object sender, EventArgs e)
        {

            PopularGridPoliticaTC(0);

            SalvarPoliticaTC.Visible = true;

            if (GridPoliticasTCCadastro.Rows.Count > 0)
            {
                SalvarPoliticaTCTodoPeriodo.Visible = true;
                SalvarPoliticaTCTodoHotel.Visible = true;
            }

            ModalPopupExtenderPoliticaTC.Show();
        }

        protected void btnSalvarPoliticaTC_Click(object sender, EventArgs e)
        {
            try
            {
                SPoliticaTCDAL spd = new SPoliticaTCDAL();
                S_Politica_TC ap = new S_Politica_TC();


                if (!Convert.ToString(ViewState["IdPoliticaTC"]).Equals(""))
                {
                    ap.S_politicaTC_qtd = Convert.ToInt32(ddlQtdChds.SelectedValue);
                    ap.S_politicaTC_idadeDe = Convert.ToInt32(ddlIdadeChdsDe.SelectedValue);
                    ap.S_politicaTC_idade = Convert.ToInt32(ddlIdadeChdsAte.SelectedValue);
                    ap.S_politicaTC_id = Convert.ToInt32(ViewState["IdPoliticaTC"]);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaTC.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaTC_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaTC_valor = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                        case 2:
                            ap.S_politicaTC_percent = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                    }

                    spd.Atualizar(ap);
                    MostrarMsg("Política TC atualizada com sucesso.");

                    SalvarPoliticaTC.Text = "Salvar";

                    ViewState["IdPoliticaTC"] = "";

                    LimpaModalPoliticaTC();
                }
                else
                {
                    ap.S_politicaTC_qtd = Convert.ToInt32(ddlQtdTCs.SelectedValue);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaTC.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaTC_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaTC_valor = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                        case 2:
                            ap.S_politicaTC_percent = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                    }

                    spd.Salvar(ap);
                    MostrarMsg("Política TC cadastrada com sucesso.");
                    LimpaModalPoliticaTC();
                }

                PopularGridPoliticaTC(0);
                ModalPopupExtenderPoliticaTC.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnSalvarPoliticaTCTarifa_Click(object sender, EventArgs e)
        {
            try
            {
                SPoliticaTCTarifasDAL spctd = new SPoliticaTCTarifasDAL();
                SPoliticaTCDAL spd = new SPoliticaTCDAL();
                S_Politica_TC spc = new S_Politica_TC();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();

                S_Politica_TC spolitcatc = spd.VerificaExiste(Convert.ToInt32(ddlQtdTCs.SelectedValue), Convert.ToInt32(ddlTipoValorPoliticaTC.SelectedValue), Convert.ToDecimal(txtValorPoliticaTC.Text), Convert.ToDecimal(txtValorPoliticaTC.Text));

                if (spolitcatc != null)
                {
                    S_PoliticaTCTarifas spct = new S_PoliticaTCTarifas();

                    spct.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifaTCSelect"]);
                    spct.S_politicaTC_id = spolitcatc.S_politicaTC_id;

                    spctd.Salvar(spct);
                }
                else
                {
                    S_Politica_TC ap = new S_Politica_TC();

                    ap.S_politicaTC_qtd = Convert.ToInt32(ddlQtdTCs.SelectedValue);

                    switch (Convert.ToInt32(ddlTipoValorPoliticaCHD.SelectedValue))
                    {
                        case 0:
                            ap.S_politicaTC_free = "Free";
                            break;
                        case 1:
                            ap.S_politicaTC_valor = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                        case 2:
                            ap.S_politicaTC_percent = Convert.ToDecimal(txtValorPoliticaTC.Text);
                            break;
                    }

                    spd.Salvar(ap);

                    S_PoliticaTCTarifas spct = new S_PoliticaTCTarifas();

                    spct.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifaTCSelect"]);
                    spct.S_politicaTC_id = ap.S_politicaTC_id;

                    spctd.Salvar(spct);
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Registro cadastrado com sucesso.");

                PopularGridPoliticasCHDCadastro(Convert.ToInt32(ViewState["IdTarifaTCSelect"]));

                ModalPopupExtenderPoliticaTC.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnSalvarPoliticaTCTodoPeriodo_Click(object sender, EventArgs e)
        {
            try
            {
                SPoliticaTCTarifasDAL spctd = new SPoliticaTCTarifasDAL();
                SPoliticaTCDAL spd = new SPoliticaTCDAL();
                S_Politica_TC spc = new S_Politica_TC();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();

                int entro = 0;

                foreach (GridViewRow item in GridPoliticasTCCadastro.Rows)
                {
                    CheckBox chkChecado = (CheckBox)item.FindControl("chkChecado");
                    Label lblIdPolitica = (Label)item.FindControl("lblIdPolitica");

                    if (chkChecado.Checked)
                    {
                        entro = 1;
                        foreach (S_Mercado_Tarifa MercadoTarifa in mtd.ListarTodosPorPeriodo(Convert.ToInt32(Session["PeriodoIDTarifas"])))
                        {
                            S_PoliticaTCTarifas spct = new S_PoliticaTCTarifas();

                            spct.S_merc_tarif_id = MercadoTarifa.S_merc_tarif_id;
                            spct.S_politicaTC_id = Convert.ToInt32(lblIdPolitica.Text);

                            spctd.Salvar(spct);
                        }
                    }
                }

                if (entro == 0)
                {
                    MostrarMsg("Selecione ao menos uma políca TC para adicionar.");
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Tarifas atualizadas com sucesso.");

                ModalPopupExtenderPoliticaTC.Show();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnSalvarPoliticaTCTodoHotel_Click(object sender, EventArgs e)
        {
            try
            {

                SPoliticaTCTarifasDAL spctd = new SPoliticaTCTarifasDAL();
                SPoliticaTCDAL spd = new SPoliticaTCDAL();
                S_Politica_TC spc = new S_Politica_TC();

                MercadoTarifaDAL mtd = new MercadoTarifaDAL();
                PeriodosDAL pd = new PeriodosDAL();

                int entro = 0;

                foreach (GridViewRow item in GridPoliticasTCCadastro.Rows)
                {
                    CheckBox chkChecado = (CheckBox)item.FindControl("chkChecado");
                    Label lblIdPolitica = (Label)item.FindControl("lblIdPolitica");

                    if (chkChecado.Checked)
                    {
                        entro = 1;
                        foreach (S_Mercado_Periodo MercadoPeriodo in pd.ListarTodosPorSupplier(Convert.ToInt32(Session["Sid"])))
                        {

                            foreach (S_Mercado_Tarifa MercadoTarifa in mtd.ListarTodosPorPeriodo(MercadoPeriodo.S_merc_periodo_id))
                            {
                                S_PoliticaTCTarifas spct = new S_PoliticaTCTarifas();

                                spct.S_merc_tarif_id = MercadoTarifa.S_merc_tarif_id;
                                spct.S_politicaTC_id = Convert.ToInt32(lblIdPolitica.Text);

                                spctd.Salvar(spct);
                            }

                        }
                    }

                }

                if (entro == 0)
                {
                    MostrarMsg("Selecione ao menos uma políca TC para adicionar.");
                }

                CarregarTarifas(sender, e);

                MostrarMsg("Tarifas atualizadas com sucesso.");

            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnRemoverPoliticaTC_Click(object sender, EventArgs e)
        {
            PopularGridPoliticaTC(0);

            SalvarPoliticaTC.Visible = true;

            if (GridPoliticasTCCadastro.Rows.Count > 0)
            {
                SalvarPoliticaTCTodoPeriodo.Visible = true;
                SalvarPoliticaTCTodoHotel.Visible = true;
            }

            ModalPopupExtenderPoliticaTC.Show();
        }

        protected void lnkEditarPolitica_Command(object sender, CommandEventArgs e)
        {
            try
            {
                int myid = Convert.ToInt32(e.CommandArgument);

                SPoliticaTCDAL spd = new SPoliticaTCDAL();

                S_Politica_TC sp = spd.ObterPorId(myid);

                txtValorPoliticaTC.Text = "";

                ddlQtdTCs.SelectedValue = sp.S_politicaTC_qtd.ToString();

                ViewState["IdPoliticaTC"] = sp.S_politicaTC_id;

                if (sp.S_politicaTC_free != null)
                { ddlTipoValorPoliticaTC.SelectedValue = "0"; }
                else if (sp.S_politicaTC_valor != null)
                { ddlTipoValorPoliticaTC.SelectedValue = "1"; txtValorPoliticaTC.Text = sp.S_politicaTC_valor.ToString(); }
                else if (sp.S_politicaTC_percent != null)
                { ddlTipoValorPoliticaTC.SelectedValue = "2"; txtValorPoliticaTC.Text = sp.S_politicaTC_percent.ToString(); }

                SalvarPoliticaTC.Text = "Atualizar";

                ModalPopupExtenderPoliticaTC.Show();
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void ExluirPolitica_Command(object sender, CommandEventArgs e)
        {
            try
            {
                SPoliticaTCTarifasDAL spd = new SPoliticaTCTarifasDAL();
                SPoliticaTCDAL scd = new SPoliticaTCDAL();

                int myid = Convert.ToInt32(e.CommandArgument);

                if (!Convert.ToString(ViewState["IdTarifaTCSelect"]).Equals(""))
                {
                    S_PoliticaTCTarifas s = spd.ObterPorId(Convert.ToInt32(ViewState["IdTarifaTCSelect"]), myid);

                    spd.Excluir(s);
                }
                else
                {
                    if (spd.ObterPorIdOP(myid) != null)
                    {
                        MostrarMsg("Existe tarifas agregadas nesta política TC.");
                    }
                    else
                    {
                        S_Politica_TC sd = scd.ObterPorId(myid);

                        scd.Excluir(sd);

                        MostrarMsg("Registro excluído com sucesso");
                    }
                }

                MostrarMsg("Registro excluído com sucesso.");
                ModalPopupExtenderPoliticaTC.Show();

                PopularGridPoliticaTC(Convert.ToInt32(ViewState["IdTarifaTCSelect"]));

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void FechaModalPoliticaTC(object sender, EventArgs e)
        {
            ViewState["OpenSemPoliticaTCIdTarifa"] = null;
            ViewState["IdTarifaTCSelect"] = "";

            ModalPopupExtenderPoliticaTC.Hide();
        }

        protected void OpenPoliticaTC(object sender, CommandEventArgs e)
        {
            try
            {

                int myid = Convert.ToInt32(e.CommandArgument);

                ViewState["IdTarifaTCSelect"] = myid;

                PopularGridPoliticaTC(myid);

                SalvarPoliticaTC.Visible = false;
                SalvarPoliticaTCTodoHotel.Visible = false;
                SalvarPoliticaTCTodoPeriodo.Visible = false;
                SalvarPoliticaTCTarifa.Visible = true;

                ModalPopupExtenderPoliticaTC.Show();

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        #endregion

        protected void MostrarMsg(string Msg)
        {
            ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "call me", "showAutoCloseMessage('" + Msg + "')", true);
        }

    }


}